package fr.skolian.core.command {
	import flash.events.EventDispatcher;
	import flash.utils.Dictionary;
	
/*Skolian - Content management system for primary school - Copyright (c) 2011 - Olivier Gianotti - This file is part of Skolian. Skolian is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Skolian is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Skolian.  If not, see <http://www.gnu.org/licenses/>.
contact : ogianotti@gmail.com 

Skolian - Application de gestion de contenus pédagogiques en école primaire. Copyright (C) 2011 - Olivier Gianotti - Ce fichier est une partie de Skolian. Skolian est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier au titre des clauses de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre discrétion) une version ultérieure quelconque. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE. Voir la Licence Publique Générale GNU pour plus de détails. Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU avec ce programme ; si ce n'est pas le cas, consultez <http://www.gnu.org/licenses/>.
contact : ogianotti@gmail.com 
*/

public class AbstractCommand extends EventDispatcher{
		
		private var _completeListeners:Array;
		private var _errorListeners:Array;
		
		public function AbstractCommand() {
			_completeListeners = new Array();
			_errorListeners = new Array();
		}

		public function addCompleteListener(listener:Function):void {
			_completeListeners.push(listener);
			addEventListener(CommandEvent.COMPLETE, listener);
		}
		
		public function addErrorListener(listener:Function):void {
			_errorListeners.push(listener);
			addEventListener(CommandEvent.ERROR, listener);
		}
		
		public function removeCompleteListener(listener:Function):void {
			removeEventListener(CommandEvent.COMPLETE, listener);
			_completeListeners.splice(_completeListeners.indexOf(listener),1);
		}
		
		public function removeErrorListener(listener:Function):void {
			removeEventListener(CommandEvent.ERROR, listener);
			_errorListeners.splice(_errorListeners.indexOf(listener),1);
		}
		
		private function removeListeners():void{
			while(_completeListeners.length>0){
				removeErrorListener(_completeListeners.shift() as Function);
			}
			while(_errorListeners.length>0){
				removeErrorListener(_errorListeners.shift() as Function);
			}
		}
		
		public function clear():void {
			removeListeners();
		}
	}
}
